ファイル直下でexportされている関数にjest.spyOnを使いたい
こんにちは。サービスGの金谷です。
JestにはspyOnという便利なメソッドが用意されています。
これを使うとJestでのテスト時に指定したメソッドがコールされているかどうかを確認できたりします。
jest.spyOn() で Vue.js コンポーネントからのサービス呼び出しをテストする
公式ドキュメントを見ると第一引数にObject、第二引数にメソッド名(文字列)を受け取ると書かれています。
jest.spyOn(object, methodName)
では、オブジェクトのメソッドではない、ファイル直下でexportされている関数にはどう使ったらいいの・・・?
と思ったので調べてみました。
以下のようなコードを想定します。
helloWorldService.ts
export function hello(): string { return "Hello"; } export default function world(): string { return "World"; }
helloWorldService.spec.ts
import { hello } from "@/helloWorldService"; import world from "@/helloWorldService"; describe("helloWorldServiceのテスト", () => { // helloとかworldをspyOnしたい });
結論
以下のように * asを使ってあげると上手くいきました。
default exportしている場合は関数名がdefaultになるので注意しましょう。
import * as helloWorldService from "@/helloWorldService"; describe("helloWorldServiceのテスト", () => { it("export", () => { const spyHello = jest.spyOn(helloWorldService, "hello"); helloWorldService.hello(); expect(spyHello).toHaveBeenCalled(); }); it("default export", () => { const spyWorld = jest.spyOn(helloWorldService, "default"); helloWorldService.default(); expect(spyWorld).toHaveBeenCalled(); }); });
テストを書くのは楽しい!!